import { IPSDataEntityObject } from '../ipsdata-entity-object';
import { IPSDEAction } from '../action/ipsdeaction';
import { IPSSysDTSQueue } from '../../dts/ipssys-dtsqueue';
import { IPSSysSFPlugin } from '../../res/ipssys-sfplugin';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSDEDTSQueue
 */
export interface IPSDEDTSQueue extends IPSDataEntityObject {
  /**
   * 取消操作实体行为
   *
   * @type {IPSDEAction}
   */
  getCancelPSDEAction(): IPSDEAction | null;

  /**
   * 取消操作实体行为
   *
   * @type {IPSDEAction}
   */
  get cancelPSDEAction(): IPSDEAction | null;

  /**
   * 取消操作实体行为（必须存在）
   *
   * @type {IPSDEAction}
   */
  getCancelPSDEActionMust(): IPSDEAction;

  /**
   * 取消超时时长（毫秒）
   * @type {number}
   * @default -1
   */
  cancelTimeout: number;

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 确认操作实体行为
   *
   * @type {IPSDEAction}
   */
  getConfirmPSDEAction(): IPSDEAction | null;

  /**
   * 确认操作实体行为
   *
   * @type {IPSDEAction}
   */
  get confirmPSDEAction(): IPSDEAction | null;

  /**
   * 确认操作实体行为（必须存在）
   *
   * @type {IPSDEAction}
   */
  getConfirmPSDEActionMust(): IPSDEAction;

  /**
   * 系统异步处理队列
   *
   * @type {IPSSysDTSQueue}
   */
  getPSSysDTSQueue(): IPSSysDTSQueue | null;

  /**
   * 系统异步处理队列
   *
   * @type {IPSSysDTSQueue}
   */
  get psSysDTSQueue(): IPSSysDTSQueue | null;

  /**
   * 系统异步处理队列（必须存在）
   *
   * @type {IPSSysDTSQueue}
   */
  getPSSysDTSQueueMust(): IPSSysDTSQueue;

  /**
   * 后端模板插件对象
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后端模板插件对象
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后端模板插件对象（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;

  /**
   * 推送实体行为
   *
   * @type {IPSDEAction}
   */
  getPushPSDEAction(): IPSDEAction | null;

  /**
   * 推送实体行为
   *
   * @type {IPSDEAction}
   */
  get pushPSDEAction(): IPSDEAction | null;

  /**
   * 推送实体行为（必须存在）
   *
   * @type {IPSDEAction}
   */
  getPushPSDEActionMust(): IPSDEAction;

  /**
   * 刷新实体行为
   *
   * @type {IPSDEAction}
   */
  getRefreshPSDEAction(): IPSDEAction | null;

  /**
   * 刷新实体行为
   *
   * @type {IPSDEAction}
   */
  get refreshPSDEAction(): IPSDEAction | null;

  /**
   * 刷新实体行为（必须存在）
   *
   * @type {IPSDEAction}
   */
  getRefreshPSDEActionMust(): IPSDEAction;

  /**
   * 刷新间隔时长（毫秒）
   * @type {number}
   * @default -1
   */
  refreshTimer: number;

  /**
   * 默认异步处理队列
   * @type {boolean}
   * @default false
   */
  default: boolean;
}
